/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * ModifyIAPLoginSessionDuration request structure.
 * @class
 */
class ModifyIAPLoginSessionDurationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Login session duration.
         * @type {number || null}
         */
        this.Duration = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Duration = 'Duration' in params ? params.Duration : null;

    }
}

/**
 * DescribeIAPLoginSessionDuration request structure.
 * @class
 */
class DescribeIAPLoginSessionDurationRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * CreateIAPUserOIDCConfig response structure.
 * @class
 */
class CreateIAPUserOIDCConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateIAPUserOIDCConfig request structure.
 * @class
 */
class CreateIAPUserOIDCConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * OpenID Connect IdP URL. It corresponds to the value of the "issuer" field in the Openid-configuration provided by the enterprise IdP.
         * @type {string || null}
         */
        this.IdentityUrl = null;

        /**
         * Client ID registered with the OpenID Connect IdP.
         * @type {string || null}
         */
        this.ClientId = null;

        /**
         * OpenID Connect IdP authorization endpoint. It corresponds to the value of the "authorization_endpoint" field in the Openid-configuration provided by the enterprise IdP.
         * @type {string || null}
         */
        this.AuthorizationEndpoint = null;

        /**
         * Authorization response type, which is always id_token.
         * @type {string || null}
         */
        this.ResponseType = null;

        /**
         * Authorization response mode. Valid values: form_post (recommended); fragment.
         * @type {string || null}
         */
        this.ResponseMode = null;

        /**
         * Mapping field name. It indicates which field in the id_token of the IdP is mapped to the username of a sub-user. It is usually the sub or name field.
         * @type {string || null}
         */
        this.MappingFiled = null;

        /**
         * Signature public key, which is used to verify the OpenID Connect IdP's ID token and must be Base64-encoded. For the security of your account, we recommend you rotate it regularly.
         * @type {string || null}
         */
        this.IdentityKey = null;

        /**
         * Authorization information scope. Valid values: openid (default); email; profile.
         * @type {Array.<string> || null}
         */
        this.Scope = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IdentityUrl = 'IdentityUrl' in params ? params.IdentityUrl : null;
        this.ClientId = 'ClientId' in params ? params.ClientId : null;
        this.AuthorizationEndpoint = 'AuthorizationEndpoint' in params ? params.AuthorizationEndpoint : null;
        this.ResponseType = 'ResponseType' in params ? params.ResponseType : null;
        this.ResponseMode = 'ResponseMode' in params ? params.ResponseMode : null;
        this.MappingFiled = 'MappingFiled' in params ? params.MappingFiled : null;
        this.IdentityKey = 'IdentityKey' in params ? params.IdentityKey : null;
        this.Scope = 'Scope' in params ? params.Scope : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * DisableIAPUserSSO response structure.
 * @class
 */
class DisableIAPUserSSOResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeIAPUserOIDCConfig request structure.
 * @class
 */
class DescribeIAPUserOIDCConfigRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * ModifyIAPLoginSessionDuration response structure.
 * @class
 */
class ModifyIAPLoginSessionDurationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeIAPUserOIDCConfig response structure.
 * @class
 */
class DescribeIAPUserOIDCConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * IdP type. 13: IAP user OIDC IdP.
         * @type {number || null}
         */
        this.ProviderType = null;

        /**
         * IdP URL.
         * @type {string || null}
         */
        this.IdentityUrl = null;

        /**
         * Public key for signature.
         * @type {string || null}
         */
        this.IdentityKey = null;

        /**
         * Client ID.
         * @type {string || null}
         */
        this.ClientId = null;

        /**
         * Status. 0: Not set; 2: Disabled; 11: Enabled.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * The verification fingerprint of the HTTPS CA certificate. English letters and digits are allowed, and each fingerprint is 40 characters long, with a maximum of 5 fingerprints.
         * @type {Array.<string> || null}
         */
        this.Fingerprints = null;

        /**
         * Whether to enable the automatic use of the OIDC signature public key. 1: Yes, 2: No (default).
         * @type {number || null}
         */
        this.EnableAutoPublicKey = null;

        /**
         * Authorization endpoint.
         * @type {string || null}
         */
        this.AuthorizationEndpoint = null;

        /**
         * Authorization scope.
         * @type {Array.<string> || null}
         */
        this.Scope = null;

        /**
         * Authorization response type.
         * @type {string || null}
         */
        this.ResponseType = null;

        /**
         * Authorization response mode.
         * @type {string || null}
         */
        this.ResponseMode = null;

        /**
         * Mapping field name.
         * @type {string || null}
         */
        this.MappingFiled = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProviderType = 'ProviderType' in params ? params.ProviderType : null;
        this.IdentityUrl = 'IdentityUrl' in params ? params.IdentityUrl : null;
        this.IdentityKey = 'IdentityKey' in params ? params.IdentityKey : null;
        this.ClientId = 'ClientId' in params ? params.ClientId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Fingerprints = 'Fingerprints' in params ? params.Fingerprints : null;
        this.EnableAutoPublicKey = 'EnableAutoPublicKey' in params ? params.EnableAutoPublicKey : null;
        this.AuthorizationEndpoint = 'AuthorizationEndpoint' in params ? params.AuthorizationEndpoint : null;
        this.Scope = 'Scope' in params ? params.Scope : null;
        this.ResponseType = 'ResponseType' in params ? params.ResponseType : null;
        this.ResponseMode = 'ResponseMode' in params ? params.ResponseMode : null;
        this.MappingFiled = 'MappingFiled' in params ? params.MappingFiled : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateIAPUserOIDCConfig response structure.
 * @class
 */
class UpdateIAPUserOIDCConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateIAPUserOIDCConfig request structure.
 * @class
 */
class UpdateIAPUserOIDCConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * OpenID Connect IdP URL. It corresponds to the value of the "issuer" field in the Openid-configuration provided by the enterprise IdP.
         * @type {string || null}
         */
        this.IdentityUrl = null;

        /**
         * Client ID registered with the OpenID Connect IdP.
         * @type {string || null}
         */
        this.ClientId = null;

        /**
         * OpenID Connect IdP authorization endpoint. It corresponds to the value of the "authorization_endpoint" field in the Openid-configuration provided by the enterprise IdP.
         * @type {string || null}
         */
        this.AuthorizationEndpoint = null;

        /**
         * Authorization response type, which is always id_token.
         * @type {string || null}
         */
        this.ResponseType = null;

        /**
         * Authorization response mode. Valid values: form_post (recommended); fragment.
         * @type {string || null}
         */
        this.ResponseMode = null;

        /**
         * Mapping field name. It indicates which field in the id_token of the IdP is mapped to the username of a sub-user. It is usually the sub or name field.
         * @type {string || null}
         */
        this.MappingFiled = null;

        /**
         * RSA signature public key in the JWKS format, which is used to verify the OpenID Connect IdP's ID token and must be Base64-encoded. For the security of your account, we recommend you rotate it regularly.
         * @type {string || null}
         */
        this.IdentityKey = null;

        /**
         * Authorization information scope. Valid values: openid (default); email; profile.
         * @type {Array.<string> || null}
         */
        this.Scope = null;

        /**
         * Description, with a length of 1 to 255 English or Chinese characters. It is empty by default.
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IdentityUrl = 'IdentityUrl' in params ? params.IdentityUrl : null;
        this.ClientId = 'ClientId' in params ? params.ClientId : null;
        this.AuthorizationEndpoint = 'AuthorizationEndpoint' in params ? params.AuthorizationEndpoint : null;
        this.ResponseType = 'ResponseType' in params ? params.ResponseType : null;
        this.ResponseMode = 'ResponseMode' in params ? params.ResponseMode : null;
        this.MappingFiled = 'MappingFiled' in params ? params.MappingFiled : null;
        this.IdentityKey = 'IdentityKey' in params ? params.IdentityKey : null;
        this.Scope = 'Scope' in params ? params.Scope : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * DisableIAPUserSSO request structure.
 * @class
 */
class DisableIAPUserSSORequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DescribeIAPLoginSessionDuration response structure.
 * @class
 */
class DescribeIAPLoginSessionDurationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Login session duration.
         * @type {number || null}
         */
        this.Duration = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Duration = 'Duration' in params ? params.Duration : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

module.exports = {
    ModifyIAPLoginSessionDurationRequest: ModifyIAPLoginSessionDurationRequest,
    DescribeIAPLoginSessionDurationRequest: DescribeIAPLoginSessionDurationRequest,
    CreateIAPUserOIDCConfigResponse: CreateIAPUserOIDCConfigResponse,
    CreateIAPUserOIDCConfigRequest: CreateIAPUserOIDCConfigRequest,
    DisableIAPUserSSOResponse: DisableIAPUserSSOResponse,
    DescribeIAPUserOIDCConfigRequest: DescribeIAPUserOIDCConfigRequest,
    ModifyIAPLoginSessionDurationResponse: ModifyIAPLoginSessionDurationResponse,
    DescribeIAPUserOIDCConfigResponse: DescribeIAPUserOIDCConfigResponse,
    UpdateIAPUserOIDCConfigResponse: UpdateIAPUserOIDCConfigResponse,
    UpdateIAPUserOIDCConfigRequest: UpdateIAPUserOIDCConfigRequest,
    DisableIAPUserSSORequest: DisableIAPUserSSORequest,
    DescribeIAPLoginSessionDurationResponse: DescribeIAPLoginSessionDurationResponse,

}
